package com.bbva.kyfb.firmas.servicios;

import org.apache.cxf.jaxrs.client.WebClient;

import com.bbva.jee.arq.spring.core.contexto.ArqSpringContext;
import com.bbva.jee.arq.spring.core.util.excepciones.PropiedadNoEncontradaExcepcion;
import com.bbva.kyfb.kyfbdto.firmas.fachada.v01.ComponentsForSignRequest;
import com.bbva.kyfb.kyfbdto.firmas.fachada.v01.DeletedFilesResponse;
import com.bbva.kyfb.kyfbdto.firmas.fachada.v01.InfoComponentDetail;
import com.bbva.kyfb.kyfbdto.firmas.fachada.v01.InfoComponentRequest;
import com.bbva.kyfb.kyfbdto.firmas.fachada.v01.InfoComponentsResponse;
import com.bbva.kyfb.kyfbdto.firmas.fachada.v01.InfoFileAuditRequest;
import com.bbva.kyfb.kyfbdto.firmas.fachada.v01.InfoFileAuditResponse;
import com.bbva.kyfb.kyfbdto.firmas.fachada.v01.InfoFileDetailedRequest;
import com.bbva.kyfb.kyfbdto.firmas.fachada.v01.InfoFileFirResponse;
import com.bbva.kyfb.kyfbdto.firmas.fachada.v01.InfoFileRequest;
import com.bbva.kyfb.kyfbdto.firmas.fachada.v01.InfoFileResponse;
import com.bbva.kyfb.kyfbdto.firmas.fachada.v01.InfoFilteredSignersRequest;
import com.bbva.kyfb.kyfbdto.firmas.fachada.v01.InfoReferenceRequest;
import com.bbva.kyfb.kyfbdto.firmas.fachada.v01.InfoSignersRequest;
import com.bbva.kyfb.kyfbdto.firmas.fachada.v01.InfoToDeleteRequest;
import com.bbva.kyfb.kyfbdto.firmas.fachada.v01.NewFileRequest;
import com.bbva.kyfb.kyfbdto.firmas.fachada.v01.SignedComponentsResponse;
import com.bbva.kyfb.kyfbdto.firmas.fachada.v01.SignerUsersResponse;
import com.bbva.kyfb.kyfbdto.firmas.fachada.v01.SignerUsersResponseRealized;

public class ServicioFirmasV01Impl implements ServicioFirmasV01 {
	
	String baseAddress = null;
	String pathServicioFirmasV01 = "/v01/ServicioFirmas/";
	String pathGetComponentesPendientesReferencia = "/firmas/infoFileFir/";
	String pathGetUsuariosFirmaRealizada = "/firmas/signedUserR/";
	String pathGetUsuariosFirmaPendiente = "/firmas/signerUser/";
	String pathgetComponentesPendientesReferenciaUsuario = "/firmas/infoFileRefUs/";
	String pathGetAuditoriaComponentePendiente = "/firmas/auditoria/";
	String pathGetListaComponentesFirmables = "/firmas/infoCompFir/";
	String pathDeleteComponentePendiente = "/firmas/deleteFile/";
	String pathCreateNuevoComponente = "/firmas/createComp/";
	String pathPutFirmaComponente = "/firmas/putFir/";
	String pathGetDetalleComponente = "/firmas/fileDetail/";
	
	/**
	 * Constructor
	 */
	public ServicioFirmasV01Impl() {
		super();
		try{
			this.baseAddress = ArqSpringContext.getPropiedad("com.bbva.jee.arq.spring.core.wsclient.url.servicioBaseFirmasV01");
		}catch(PropiedadNoEncontradaExcepcion pnee){
			this.baseAddress = "http://localhost:8080/kyfb_mult_web_kyfbws_03/services/rest";
		}
	}
	/**{@inheritDoc}
	 * @see com.bbva.kyfb.firmas.servicios.ServicioFirmasV01#getComponentesPendientesReferencia(com.bbva.kyfb.kyfbdto.firmas.fachada.v01.InfoFileRequest)
	 */
	@Override
	public InfoFileFirResponse getComponentesPendientesReferencia(
			InfoFileRequest info) {
		// Declaración del tipo de respuesta
		InfoFileFirResponse respuesta = new InfoFileFirResponse();
		
		// Consulta al webservice
		WebClient cliente = WebClient.create(baseAddress);
		cliente = cliente.path(pathServicioFirmasV01+pathGetComponentesPendientesReferencia);
		respuesta = cliente.post(info, InfoFileFirResponse.class);
		
		// Devolución de la respuesta
		return respuesta;
	}
	/**{@inheritDoc}
	 * @see com.bbva.kyfb.firmas.servicios.ServicioFirmasV01#getUsuariosFirmaRealizada(com.bbva.kyfb.kyfbdto.firmas.fachada.v01.InfoSignersRequest)
	 */
	@Override
	public SignerUsersResponseRealized getUsuariosFirmaRealizada(
			InfoSignersRequest info) {
		// Declaración del tipo de respuesta
		SignerUsersResponseRealized respuesta = new SignerUsersResponseRealized();
		
		// Consulta al webservice
		WebClient cliente = WebClient.create(baseAddress);
		cliente = cliente.path(pathServicioFirmasV01+pathGetUsuariosFirmaRealizada);
		respuesta = cliente.post(info, SignerUsersResponseRealized.class);
		
		// Devolución de la respuesta
		return respuesta;
	}
	/**{@inheritDoc}
	 * @see com.bbva.kyfb.firmas.servicios.ServicioFirmasV01#getUsuariosFirmaPendiente(com.bbva.kyfb.kyfbdto.firmas.fachada.v01.InfoFilteredSignersRequest)
	 */
	@Override
	public SignerUsersResponse getUsuariosFirmaPendiente(
			InfoFilteredSignersRequest info) {
		// Declaracion del tipo de respuesta
		SignerUsersResponse respuesta = new SignerUsersResponse();
		
		// Consulta al webservice
		WebClient cliente = WebClient.create(baseAddress);
		cliente = cliente.path(pathServicioFirmasV01+pathGetUsuariosFirmaPendiente);
		respuesta = cliente.post(info, SignerUsersResponse.class);
		
		// Devolución de la respuesta
		return respuesta;
	}
	/**{@inheritDoc}
	 * @see com.bbva.kyfb.firmas.servicios.ServicioFirmasV01#getComponentesPendientesReferenciaUsuario(com.bbva.kyfb.kyfbdto.firmas.fachada.v01.InfoFileDetailedRequest)
	 */
	@Override
	public InfoFileResponse getComponentesPendientesReferenciaUsuario(
			InfoFileDetailedRequest info) {
		// Declaración del tipo de respuesta
		InfoFileResponse respuesta = new InfoFileResponse();
		
		// Consulta al webservice
		WebClient cliente = WebClient.create(baseAddress);
		cliente = cliente.path(pathServicioFirmasV01+pathgetComponentesPendientesReferenciaUsuario);
		respuesta = cliente.post(info, InfoFileResponse.class);
		
		// Devolución de la respuesta
		return respuesta;
	}
	/**{@inheritDoc}
	 * @see com.bbva.kyfb.firmas.servicios.ServicioFirmasV01#getAuditoriaComponentePendiente(com.bbva.kyfb.kyfbdto.firmas.fachada.v01.InfoFileAuditRequest)
	 */
	@Override
	public InfoFileAuditResponse getAuditoriaComponentePendiente(
			InfoFileAuditRequest info) {
		// Declaración del tipo de respuesta
		InfoFileAuditResponse respuesta = new InfoFileAuditResponse();
		
		// Consulta al webservice
		WebClient cliente = WebClient.create(baseAddress);
		cliente = cliente.path(pathServicioFirmasV01+pathGetAuditoriaComponentePendiente);
		respuesta = cliente.post(info, InfoFileAuditResponse.class);
		
		// Devolución de la respuesta
		return respuesta;
	}
	/**{@inheritDoc}
	 * @see com.bbva.kyfb.firmas.servicios.ServicioFirmasV01#getListaComponentesFirmables(com.bbva.kyfb.kyfbdto.firmas.fachada.v01.InfoReferenceRequest)
	 */
	@Override
	public InfoComponentsResponse getListaComponentesFirmables(
			InfoReferenceRequest info) {
		// Declaración del tipo de respuesta
		InfoComponentsResponse respuesta = new InfoComponentsResponse();
		
		// Consulta al webservice
		WebClient cliente = WebClient.create(baseAddress);
		cliente = cliente.path(pathServicioFirmasV01+pathGetListaComponentesFirmables);
		respuesta = cliente.post(info, InfoComponentsResponse.class);
		
		// Devolución de la respuesta
		return respuesta;
	}
	/**{@inheritDoc}
	 * @see com.bbva.kyfb.firmas.servicios.ServicioFirmasV01#deleteComponentePendiente(com.bbva.kyfb.kyfbdto.firmas.fachada.v01.InfoToDeleteRequest)
	 */
	@Override
	public DeletedFilesResponse deleteComponentePendiente(
			InfoToDeleteRequest info) {
		// Declaración del tipo de respuesta
		DeletedFilesResponse respuesta = new DeletedFilesResponse();
		
		// Consulta al webservice
		WebClient cliente = WebClient.create(baseAddress);
		cliente = cliente.path(pathServicioFirmasV01+pathDeleteComponentePendiente);
		respuesta = cliente.post(info, DeletedFilesResponse.class);
		
		// Devolución de la respuesta
		return respuesta;
	}
	/**{@inheritDoc}
	 * @see com.bbva.kyfb.firmas.servicios.ServicioFirmasV01#createNuevoComponente(com.bbva.kyfb.kyfbdto.firmas.fachada.v01.NewFileRequest)
	 */
	@Override
	public String createNuevoComponente(NewFileRequest newFile) {
		// Declaración del tipo de respuesta
		String respuesta = null;
		
		// Consulta al webservice
		WebClient cliente = WebClient.create(baseAddress);
		cliente = cliente.path(pathServicioFirmasV01+pathCreateNuevoComponente);
		respuesta = cliente.post(newFile, String.class);
		
		// Devolución de la respuesta
		return respuesta;
	}
	/**{@inheritDoc}
	 * @see com.bbva.kyfb.firmas.servicios.ServicioFirmasV01#putFirmaComponente(com.bbva.kyfb.kyfbdto.firmas.fachada.v01.ComponentsForSignRequest)
	 */
	@Override
	public SignedComponentsResponse putFirmaComponente(
			ComponentsForSignRequest components) {
		// Declaración del tipo de respuesta
		SignedComponentsResponse respuesta = new SignedComponentsResponse();
		
		// Consulta al webservice
		WebClient cliente = WebClient.create(baseAddress);
		cliente = cliente.path(pathServicioFirmasV01+pathPutFirmaComponente);
		respuesta = cliente.post(components, SignedComponentsResponse.class);
		
		// Devolución de la respuesta
		return respuesta;
	}
	/**{@inheritDoc}
	 * @see com.bbva.kyfb.firmas.servicios.ServicioFirmasV01#getDetalleComponente(com.bbva.kyfb.kyfbdto.firmas.fachada.v01.InfoComponentRequest)
	 */
	@Override
	public InfoComponentDetail getDetalleComponente(InfoComponentRequest info) {
		// Declaración del tipo de respuesta
		InfoComponentDetail respuesta = new InfoComponentDetail();
		
		// Consulta al webservice
		WebClient cliente = WebClient.create(baseAddress);
		cliente = cliente.path(pathServicioFirmasV01+pathGetDetalleComponente);
		respuesta = cliente.post(info,InfoComponentDetail.class);
		
		//Devolución de la respuesta
		return respuesta;
	}

}
